/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sigodonto.view.managedbean;

import br.com.sigodonto.model.dao.DaoGenerico;
import br.com.sigodonto.model.entity.Dentista;
import br.com.sigodonto.model.entity.Especialidade;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author Fidelis
 */
@ManagedBean(name = "gerenciarDentistaMB")
@ViewScoped
public class GerenciarDentistaMB implements Serializable {

    /**
     * Creates a new instance of GerenciarDentistaMB
     */
    private String[] estados = {"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Distrito Federal", "Espírito Santo", "Goiás", "Maranhão",
        "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte",
        "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catariana", "São Paulo", "Sergipe", "Tocantins"};
    private Dentista dentista;
    private Dentista dentistaSelecionado;
    private List<Especialidade> especialidadesTodas;
    private List<Dentista> dentistasTodos;
    private DaoGenerico daoGenerico;
    private Especialidade especialidadeCadastrar;
    private String senha1;
    private String senha2;
    private List<String> especialidadesSelecionadas;
    private boolean cadastro;

    public GerenciarDentistaMB() {
        this.daoGenerico = new DaoGenerico();
        this.especialidadesTodas = this.daoGenerico.listarTodos(Especialidade.class);
        this.dentistasTodos = this.daoGenerico.listarTodos(Dentista.class);
        this.dentista = new Dentista();
        this.dentistaSelecionado = new Dentista();
        this.especialidadeCadastrar = new Especialidade();
        this.especialidadesSelecionadas = new ArrayList<String>();
        this.cadastro = true;

    }

    public String[] getEstados() {
        return estados;
    }

    public Dentista getDentista() {
        return dentista;
    }

    public void setDentista(Dentista dentista) {
        this.dentista = dentista;
    }

    public Dentista getDentistaSelecionado() {
        return dentistaSelecionado;
    }

    public void setDentistaSelecionado(Dentista dentistaSelecionado) {
        this.dentistaSelecionado = dentistaSelecionado;
    }

    public List<Dentista> getDentistasTodos() {
        return dentistasTodos;
    }

    public void setDentistasTodos(List<Dentista> dentistasTodos) {
        this.dentistasTodos = dentistasTodos;
    }

    public List<Especialidade> getEspecialidadesTodas() {
        return especialidadesTodas;
    }

    public Especialidade getEspecialidadeCadastrar() {
        return especialidadeCadastrar;
    }

    public void setEspecialidadeCadastrar(Especialidade especialidadeCadastrar) {
        this.especialidadeCadastrar = especialidadeCadastrar;
    }

    public String getSenha1() {
        return senha1;
    }

    public void setSenha1(String senha1) {
        this.senha1 = senha1;
    }

    public String getSenha2() {
        return senha2;
    }

    public void setSenha2(String senha2) {
        this.senha2 = senha2;
    }

    public List<String> getEspecialidadesSelecionadas() {
        return especialidadesSelecionadas;
    }

    public void setEspecialidadesSelecionadas(List<String> especialidadesSelecionadas) {
        this.especialidadesSelecionadas = especialidadesSelecionadas;
    }

    public boolean isCadastro() {
        return cadastro;
    }

    public void setCadastro(boolean cadastro) {
        this.cadastro = cadastro;
    }

    public void salvarDentista() {
        FacesMessage message = new FacesMessage();

        String msg = "DENTISTA CADASTRADO COM SUCESSO!";
        message.setSeverity(FacesMessage.SEVERITY_INFO);

        if (this.cadastro) {
            if (senha1.equals(senha2)) {

                if (!this.especialidadesSelecionadas.isEmpty()) {
                    List<Especialidade> especialidades = new ArrayList<Especialidade>();
                    for (String string : especialidadesSelecionadas) {
                        Long id = new Long(string);
                        for (Especialidade especialidade : especialidadesTodas) {
                            if (especialidade.getId().equals(id)) {
                                especialidades.add(especialidade);
                            }
                        }
                    }
                    this.dentista.setEspecialidades(especialidades);
                }

                this.dentista.getContaUsuario().setSenha(senha1);
                this.dentista.getContaUsuario().setStatus("A");
                this.dentista.getContaUsuario().setTipo("DE");
                boolean certo = this.daoGenerico.salvar(this.dentista);

                if (!certo) {
                    msg = "ERRO AO CADASTRAR DENTISTA!";
                    message.setSeverity(FacesMessage.SEVERITY_ERROR);
                } else {
                    this.dentistasTodos = this.daoGenerico.listarTodos(Dentista.class);
                    this.dentista = new Dentista();
                    this.especialidadesSelecionadas = new ArrayList<String>();
                }
            } else {
                msg = "CONFIRME A SENHA NOVAMENTE!";
                message.setSeverity(FacesMessage.SEVERITY_ERROR);
            }
        } else {
            if (!this.especialidadesSelecionadas.isEmpty()) {
                List<Especialidade> especialidades = new ArrayList<Especialidade>();
                for (String string : especialidadesSelecionadas) {
                    Long id = new Long(string);
                    for (Especialidade especialidade : especialidadesTodas) {
                        if (especialidade.getId().equals(id)) {
                            especialidades.add(especialidade);
                        }
                    }
                }
                this.dentista.setEspecialidades(especialidades);
            }

            boolean certo = this.daoGenerico.salvar(this.dentista);

            if (!certo) {
                msg = "ERRO AO CADASTRAR DENTISTA!";
                message.setSeverity(FacesMessage.SEVERITY_ERROR);
            } else {
                this.dentistasTodos = this.daoGenerico.listarTodos(Dentista.class);
                this.dentista = new Dentista();
                this.especialidadesSelecionadas = new ArrayList<String>();
            }
        }
        message.setSummary(msg);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void excluirDentista() {
        if (this.dentistaSelecionado != null) {
            String msg = "DENTISTA REMOVIDO COM SUCESSO!";
            FacesMessage message = new FacesMessage(msg);
            message.setSeverity(FacesMessage.SEVERITY_INFO);

            boolean certo = this.daoGenerico.remover(this.dentistaSelecionado);

            if (!certo) {
                msg = "ERRO AO REMOVER DENTISTA!";
                message.setSummary(msg);
                message.setSeverity(FacesMessage.SEVERITY_ERROR);
            } else {
                this.dentistasTodos = this.daoGenerico.listarTodos(Dentista.class);
            }

            FacesContext.getCurrentInstance().addMessage(null, message);

        }
    }

    public void atualizarDentista() {
        if (this.dentistaSelecionado != null) {
            this.dentista = this.dentistaSelecionado;
            this.cadastro = false;
        }
    }

    public void cadastrarEspecialidade() {
        boolean certo = this.daoGenerico.salvar(this.especialidadeCadastrar);
        FacesMessage message = new FacesMessage();

        String msg = "ESPECIALIDADE CADASTRADA COM SUCESSO!";
        message.setSeverity(FacesMessage.SEVERITY_INFO);

        if (!certo) {
            msg = "ERRO AO CADASTRAR ESPECIALIDADE!";
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
        }

        this.especialidadesTodas = this.daoGenerico.listarTodos(Especialidade.class);
        this.especialidadeCadastrar = new Especialidade();

        message.setSummary(msg);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
}
